Add preliminary articles for commands V3#21
Conversation
| --- | ||
| import Aside from '../../../components/Aside.astro'; | ||
|
|
||
| # What is a Command? |
There was a problem hiding this comment.
I think it needs some explanation of what command based programming is to make the transition between intro to Java and FRC programming smoother. I also think that knowing what is Command Based programming as a concept, even if it's in simple terms, is important.
This introduction could also mention what WPILib is since it's sort of mentioned in #9 but it's never correctly explained.
| as raising an arm joint or complex as an autonomous program. Think of them as powered-up | ||
| methods that can handle the requirements for controlling a robot over long periods of time. | ||
|
|
||
| # What's wrong with methods? |
There was a problem hiding this comment.
What about "Why not use methods?" because I think that's the question most new programmers might think. also "what's wrong" could sound like methods aren't supposed to be used in FRC programming
| ``` | ||
| Here, the problem is with the while loop. While it's running, we are only setting the voltage of the motor; | ||
| not listening to button presses, logging data, and running other background tasks. To function properly, WPILib | ||
| requires many of these background tasks to be run periodically(at a 0.02 second or smaller interval). |
There was a problem hiding this comment.
What about
many of these background tasks to be run periodically, which means they run at 0.02 seconds or at a smaller interval
| Functionally, commands are superpowered methods that gives you a special statement that runs | ||
| these background tasks within a while loop: `coroutine.yield()`. | ||
| ```java | ||
| System.out.println("Hello World!"); |
There was a problem hiding this comment.
System.out.println isn't used for print outs in FRC but I think this is a good spot to introduce and use Driverstation.reportWarning()
| The following allows you to start a command asynchronously: | ||
|
|
||
| ```java | ||
| Command runMotor = ...; // see previous example |
There was a problem hiding this comment.
I would just put the previous code there instead so viewers don't have to keep scrolling up to reference it. In addition, you could put a comment like //code from previous example on top so viewers know where the code is coming from if that's helpful
| will run before the `runMotor` command completes. | ||
|
|
||
| But the vast majority of the time, you want a command to run when a button is pressed or held down. | ||
| To do this, we use a `CommandGamepad` instead of a `Gamepad`, like so: |
There was a problem hiding this comment.
At this point, they don't know what a Gamepad is so it's probably not worth mentioning
There was a problem hiding this comment.
Wouldn't they have to know it due to section 1a being about coding a kitbot?
|
|
||
| In this case, the `runMotor` command will run once the left trigger is pressed. | ||
| If it is desired to cancel the runMotor command once the left trigger is released, | ||
| the `onTrue` statement can be replaced with `whileTrue`: |
There was a problem hiding this comment.
I would explain more on why that is the case
|
|
||
| # An overview of Mechanisms | ||
|
|
||
| A `Mechanism`, on the surface level, is a part of the robot, like a double-jointed arm or a shooter. |
There was a problem hiding this comment.
It also might help to briefly explain the connection between Commands and Mechanisms. Could be as simple as explaining how Mechanism use Commands to move a part of the robot. Like spinning a motor on a shooter to shot a ball.
| # An overview of Mechanisms | ||
|
|
||
| A `Mechanism`, on the surface level, is a part of the robot, like a double-jointed arm or a shooter. | ||
| If you've used commands V2 before, they're the exact same thing as subsystems (and in that case, feel free |
There was a problem hiding this comment.
Might be worth putting that in a note rather than in a paragraph
| Ideally, we could declare what motors each command requires. If 2 commands that | ||
| required the same motor were ran simultaneously, one would get cancelled. | ||
|
|
||
| However, there are many varieties of motors and actuating components. As a result, the commands |
There was a problem hiding this comment.
| However, there are many varieties of motors and actuating components. As a result, the commands | |
| However, there are many varieties of motors and actuating components on a robot. As a result, the commands |
| } | ||
| ``` | ||
|
|
||
| In this case, the `runMotor` command will run once the left trigger is pressed. |
There was a problem hiding this comment.
| In this case, the `runMotor` command will run once the left trigger is pressed. | |
| In this case, the `runMotor` command will run once the left trigger on the controller is pressed. |
| without waiting for it to finish. In this case, the `println("Hello!")` statement | ||
| will run before the `runMotor` command completes. | ||
|
|
||
| But the vast majority of the time, you want a command to run when a button is pressed or held down. |
There was a problem hiding this comment.
| But the vast majority of the time, you want a command to run when a button is pressed or held down. | |
| But the vast majority of the time, you want a command to run when a button on a controller is pressed or held down. |
| { label: 'The Command Scheduler', slug: 'section-2-commands/the-command-scheduler' }, | ||
| ], | ||
| } | ||
| ] |
No description provided.